package com.produtos;

import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;

public class DBAdapter {
	private SQLiteDatabase database;
	private DbHelper dbHelper;
	private String[] allColumns = { DbHelper.ID, DbHelper.CODE, DbHelper.PRODUTO, DbHelper.DESC, DbHelper.PRECO, DbHelper.QTD, DbHelper.FOTO};
	

	public DBAdapter(Context context) {
		dbHelper = new DbHelper(context);
	}
	
	public void open() throws SQLException {
		database = dbHelper.getWritableDatabase();
	}

	public void close() {
		dbHelper.close();
	}
	
	
	public Produto createProduto(String code, String produto, String desc, String preco, String qtd, Bitmap foto)  {
		produto.replace(',', '.');
		ContentValues values = new ContentValues();
		values.put(dbHelper.CODE, code);
		values.put(dbHelper.PRODUTO, produto);
		values.put(dbHelper.DESC, desc);
		values.put(dbHelper.PRECO, preco);
		values.put(dbHelper.QTD, qtd);
			
		
		ByteArrayOutputStream baos = new ByteArrayOutputStream();  
		foto.compress(Bitmap.CompressFormat.PNG, 100, baos);  
		byte[] photo = baos.toByteArray(); 
			
		values.put(dbHelper.FOTO, photo);
			
		long insertId = database.insert(dbHelper.TABLE_NAME, null, values);
		// To show how to query
		Cursor cursor = database.query(dbHelper.TABLE_NAME, allColumns, dbHelper.ID + " = " + insertId, null,null, null, null, null);
		cursor.moveToFirst();
		return cursorToProduto(cursor);
	}
	
	public void ExcluirProduto (int idProduto){
		database.delete(DbHelper.TABLE_NAME, DbHelper.ID + " = " + idProduto, null);
		}
	
	public void EditarProduto (String code_b, String novo_p, float novo_preco, float qtd){
		ContentValues values = new ContentValues();
		values.put(dbHelper.PRODUTO, novo_p);
		values.put(dbHelper.PRECO, novo_preco);
		values.put(dbHelper.QTD, qtd);
		database.update(dbHelper.TABLE_NAME, values, DbHelper.CODE + " = " + code_b, null);	
	}
	
	private Produto cursorToProduto(Cursor cursor) {
		byte[] blob = cursor.getBlob(cursor.getColumnIndex(dbHelper.FOTO));
	      	Bitmap bmp = BitmapFactory.decodeByteArray(blob, 0, blob.length);
	      	Log.d("float antes ", cursor.getString(4));
	      	float preco = isFloat(cursor.getString(4));
	      	float qtd = isFloat(cursor.getString(5));
			Log.d("TESTE1", preco + "");
	      	Produto produto = new Produto(cursor.getLong(0),cursor.getString(1),cursor.getString(2),cursor.getString(3),preco,qtd,bmp);
		return produto;
	}
	
	public float isFloat (String f)throws NumberFormatException {
		return Float.parseFloat(f);
	}

	public Cursor getProdutos(){
		Cursor cursor = database.rawQuery("select * from produtos", null);
			return cursor;
	}
	public Produto getProduto (int idProduto) {
		Cursor cursor = database.query(dbHelper.TABLE_NAME, allColumns, dbHelper.ID + " = " + idProduto, null,null, null, null, null);
			cursor.moveToFirst();
		return cursorToProduto(cursor);
	}
	
	public boolean verificaCode(String code){
		boolean result = false;
		String comSql = "select * from " + DbHelper.TABLE_NAME + " where " + DbHelper.CODE + " = " +code+";";
		Cursor cursor = database.rawQuery(comSql, null);
	//	cursor.moveToFirst();
		while (cursor.moveToNext()) {
			String codebarras = cursor.getString(1);
			if(codebarras.equals(code)){
				result = true;
			}		
		}		
		return result;
	}
	
	public Produto adicionarProdutoCarrinho (long idProduto) throws SQLException{
		String comSql = "select * from " + DbHelper.TABLE_NAME + " where " + DbHelper.ID + " = " +idProduto+";";
		Cursor cursor = database.rawQuery(comSql, null);
		if (cursor.moveToFirst()) {
			long idProduct = cursor.getLong(0);
			String code = cursor.getString(1);
			String produt = cursor.getString(2);
			String desc = cursor.getString(3);
			float preco = isFloat(cursor.getString(5));
	      	float qtd = isFloat(cursor.getString(4));
			Produto produto = new Produto(idProduct, code, produt, desc, preco, qtd);
			comSql = "select * from " + DbHelper.TABLE_LISTA_DE_COMPRAS + " where " +DbHelper.ID_PRODUTO+ " = " + idProduto + ";";
			cursor = database.rawQuery(comSql, null);
			if (cursor.moveToNext())
				return null;
			
			comSql = "insert into " + DbHelper.TABLE_LISTA_DE_COMPRAS + " ( " +DbHelper.ID_PRODUTO + " , " +
					DbHelper.DATA + " , " +DbHelper.LOCAL + " , " +DbHelper.EMPRESA + " ) " + "values (?,?,?,?)";
			Object obj [] = {idProduct,new Date(),"",""};
			database.execSQL(comSql, obj);
			return produto;
		}
		return null;
	}
	
	public List<Produto> getTodosElementosDaLista () {
		List<Produto> produtos = new ArrayList<Produto>();
		
		
		String comSql = "select " + DbHelper.ID + " , "  +DbHelper.CODE + " , " +
						DbHelper.PRODUTO + " , " + DbHelper.DESC + " , " + DbHelper.QTD + " , " +
						DbHelper.PRECO + " , " +DbHelper.ID_COMPRA+" , " + DbHelper.DATA +
						" from " + DbHelper.TABLE_LISTA_DE_COMPRAS + 
						" inner join " + DbHelper.TABLE_NAME + " on " + DbHelper.TABLE_NAME + "." + DbHelper.ID + 
						" = " + DbHelper.TABLE_LISTA_DE_COMPRAS + "." +DbHelper.ID_PRODUTO + ";";
		Cursor cursor = database.rawQuery(comSql, null);
		cursor.moveToFirst();
		while (! cursor.isAfterLast()) {
			long idProduto = cursor.getLong(0);
			String code = cursor.getString(1);
			String nomeP = cursor.getString(2);
			String desc = cursor.getString(3);
			float preco = isFloat(cursor.getString(5));
	      	float qtd = isFloat(cursor.getString(4));
			Produto produto  = new Produto(idProduto, code, nomeP, desc, preco, qtd);
	 		produtos.add(produto);
	 		cursor.moveToNext();
		}
		return produtos;
	}


	public void ExcluirProdutoListaDeCompras(long l){
		database.delete(DbHelper.TABLE_LISTA_DE_COMPRAS, DbHelper.ID_PRODUTO + " = " + l, null);
	}
/*	
	public float retornaFloat (float n) {
		float resto = 0;

		Log.d("VALOR : ", n+"");
		int inteiro;
		inteiro = (int) n/1;
		resto = n % inteiro;
		Log.d("VALOR DO LOG: ", resto+"");
		String fString = ""+resto/1;
		
		Log.d("VALOR DA STRING: ", fString +"");
		String aux = "";
		int i;
		for (i = 0; i < fString.length() && (fString.charAt(i) != '.'); i++)
			aux += fString.charAt(i);
		if(casasDecimais(resto) >= 2){
		for (int j = i; j < i+3;j++)
			aux+= fString.charAt(j);
		}
		else{
			for (int j = i; j < i+2;j++)
				aux+= fString.charAt(j);
		}
		Log.d("TESTET5", aux);
		float h = Float.parseFloat(aux);
		Log.d("TESTET4", h + "");
		h += inteiro;
		Log.d("TESTET3", h + "");
		return h;
		
	}
	
	public int casasDecimais (float n) {
		String aux = ""+n;
		int i;
		int casas = 0;
		for (i = 0; i < aux.length() && (aux.charAt(i) != '.'); i++);
			
		for (int j = i+1; j < aux.length();j++)
			casas++;
		return casas;	
	}*/
	
}
